package io.renren.util;

import io.renren.bean.ExercisesQuestionInfo;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;



/**
 *
 * 处理练习题目
 *
 * ClassName: ExercisesUtil
 *
 * @Description: TODO
 * @author yzw
 * @date 2017年8月1日
 */
public class ExercisesUtil {

    /**
     *
     * 处理顺序练习的菜单序号
     *
     * @Description: TODO
     * @param @param menuSortInfoList 菜单序号list
     * @param @param sumQuestionNumber 当前试卷总题数
     * @param @param answerNumber 当前已答题数量
     * @param @return
     * @return ExercisesQuestionInfo
     * @throws
     * @author yzw
     * @date 2017年8月1日
     */
    public static ExercisesQuestionInfo checkSort(
            List<Map<String, Object>> menuSortInfoList,
            Integer sumQuestionNumber, Integer answerNumber) {
        ExercisesQuestionInfo bean = new ExercisesQuestionInfo();
        bean.setSumQuestionNumber(sumQuestionNumber);// 当前试卷总题数
        bean.setAnswerNumber(answerNumber);// 当前已答题数量
        bean.setExercisesType(1); // 练习类型，1表示顺序练习；2表示随机练习；3表示错题练习
        if (menuSortInfoList != null && menuSortInfoList.size() > 0) {
            List<ExercisesQuestionInfo.MenuSortInfo> sortList = new ArrayList<ExercisesQuestionInfo.MenuSortInfo>();
            for (int i = 0; i < menuSortInfoList.size(); i++) {
                String isSubmit = menuSortInfoList.get(i).get("isSubmit") == null ? "0"
                        : menuSortInfoList.get(i).get("isSubmit").toString(); // 1表示已提交，0表示未提交
                String isTrue = menuSortInfoList.get(i).get("isTrue") == null ? "0"
                        : menuSortInfoList.get(i).get("isTrue").toString(); // 1表示答对，0表示答错
                ExercisesQuestionInfo.MenuSortInfo menuSort = bean.new MenuSortInfo();
                menuSort.setMenuSort(i + 1); // 序号
                if (isSubmit.equals("0")) {
                    menuSort.setState(1);// 状态，1表示未做；2表示做对；3表示做错；
                } else {
                    if (isTrue.equals("0")) {
                        menuSort.setState(3);
                    } else {
                        menuSort.setState(2);
                    }
                }
                sortList.add(menuSort);
            }
            bean.setMenuSortInfoList(sortList);
        }
        return bean;
    }

    /**
     *
     * 处理题目信息
     *
     * @Description: TODO
     * @param @param exercisesType 练习类型，1表示顺序练习；2表示随机练习；3表示错题练习
     * @param @param questionList 题目list
     * @param @param bean 处理题目bean
     * @param @return
     * @return ExercisesQuestionInfo
     * @throws
     * @author yzw
     * @date 2017年8月1日
     */
    public static ExercisesQuestionInfo checkQuestion(Integer exercisesType, List<Map<String, Object>> questionList, ExercisesQuestionInfo bean) {
        bean.setExercisesType(exercisesType);
        if (questionList != null && questionList.size() > 0) {
            for (int i = 0; i < questionList.size(); i++) {
                Integer sort = questionList.get(i).get("sort") == null ? null
                        : Double.valueOf(
                        questionList.get(i).get("sort").toString())
                        .intValue(); // 序号
                Integer questionId = questionList.get(i).get("questionId") == null ? null
                        : Double.valueOf(
                        questionList.get(i).get("questionId")
                                .toString()).intValue(); // 题目id
                String studentAnswer = questionList.get(i).get("studentAnswer") == null ? null
                        : questionList.get(i).get("studentAnswer").toString(); // 学员答案
                Boolean isTrue = questionList.get(i).get("isTrue") == null ? false
                        : Boolean.valueOf(questionList.get(i).get("isTrue")
                        .toString()); // 正确状态，true（1）表示正确，false（0）表示错误
                String trueAnswer = questionList.get(i).get("trueAnswer") == null ? null
                        : questionList.get(i).get("trueAnswer").toString(); // 正确答案
                String questionContent = questionList.get(i).get(
                        "questionContent") == null ? "" : questionList.get(i)
                        .get("questionContent").toString(); // 问题内容
                String optionContent = questionList.get(i).get("optionContent") == null ? ""
                        : questionList.get(i).get("optionContent").toString(); // 选项内容
                Integer optionType = questionList.get(i).get("optionType") == null ? null
                        : Double.valueOf(
                        questionList.get(i).get("optionType")
                                .toString()).intValue();// 选项类型；1表示单选，2表示多选，3表示判断
                Integer questionType = questionList.get(i).get("questionType") == null ? null
                        : Double.valueOf(
                        questionList.get(i).get("questionType")
                                .toString()).intValue();// 1代表普通题目（题目和选项都没有图片）；2代表仅仅题目有图片；3代表仅仅选项有图片；4代表题目有视频
                String questionImageUrl = questionList.get(i).get(
                        "questionImageUrl") == null ? null : questionList
                        .get(i).get("questionImageUrl").toString(); // 题目图片地址
                String questionVideoUrl = questionList.get(i).get(
                        "questionVideoUrl") == null ? null : questionList
                        .get(i).get("questionVideoUrl").toString(); // 题目视频地址
                Integer isCollection = questionList.get(i).get("isCollection") == null ? 0
                        : Double.valueOf(
                        questionList.get(i).get("isCollection")
                                .toString()).intValue(); // 1表示收藏，0表示没收藏
                Integer isSubmit = questionList.get(i).get("isSubmit") == null ? 0
                        : Double.valueOf(
                        questionList.get(i).get("isSubmit").toString())
                        .intValue(); // 1表示提交，0表示没提交
                String remark = questionList.get(i).get("remark") == null ? ""
                        : questionList.get(i).get("remark").toString(); // 题目备注
                ExercisesQuestionInfo.QuestionInfo questionBean = bean.new QuestionInfo();
                questionBean.setSort(sort);// 当前题号
                questionBean.setQuestionId(questionId);// 题目id
                questionBean.setQuestionContent(questionContent);// 题目内容
                questionBean.setOptionType(optionType);// 选项类型；1表示单选，2表示多选，3表示判断
                questionBean.setQuestionType(questionType);// 题目类型；1代表普通题目（题目和选项都没有图片）；2代表仅仅题目有图片；3代表仅仅选项有图片；4代表题目有视频
                if (questionType == 2) {
                    questionBean.setQuestionImageUrl(questionImageUrl);// 题目图片地址
                } else {
                    questionBean.setQuestionImageUrl(null);// 题目图片地址
                }
                if (questionType == 4) {
                    questionBean.setQuestionVideoUrl(questionVideoUrl);// 题目视频地址
                } else {
                    questionBean.setQuestionVideoUrl(null);// 题目视频地址
                }
                if (isCollection == 0) {
                    questionBean.setIsCollection(false);// true表示已收藏，false表示未收藏
                } else {
                    questionBean.setIsCollection(true);// true表示已收藏，false表示未收藏
                }
                if (exercisesType == 1) {
                    if (isSubmit == 1) {
                        questionBean.setIsSubmit(true); // true表示已提交当前题目，false表示未提交当前题目
                        questionBean.setTrueAnswer(trueAnswer);// 正确答案
                        questionBean.setIsTrue(isTrue);// 正确状态，true表示正确，false表示错误
                    } else {
                        questionBean.setIsSubmit(false);// true表示已提交当前题目，false表示未提交当前题目

                    }
                    questionBean.setStudentAnswer(studentAnswer);// 学员答案
                } else {
                    questionBean.setIsSubmit(null); // true表示已提交当前题目，false表示未提交当前题目
                    questionBean.setIsTrue(null);// 正确状态，true表示正确，false表示错误
                    questionBean.setIsSubmit(null);// true表示已提交当前题目，false表示未提交当前题目
                }
                questionBean.setRemark(remark);// 备注
                // ----------------处理选项start
                questionBean.setOptionInfoList(getOptionList(questionType,
                        optionContent, questionBean));
                // ----------------处理选项end
                bean.setQuestionInfo(questionBean);
            }
        }

        return bean;
    }

    /**
     *
     * 处理选项
     *
     * @Description: TODO
     * @param @param questionType
     *        1代表普通题目（题目和选项都没有图片）；2代表仅仅题目有图片；3代表仅仅选项有图片；4代表题目有视频
     * @param @param optionContent
     * @param @param questionBean
     * @param @return
     * @return List<ExercisesQuestionInfo.QuestionInfo.OptionInfo>
     * @throws
     * @author yzw
     * @date 2017年8月1日
     */
    @SuppressWarnings("unchecked")
    public static List<ExercisesQuestionInfo.QuestionInfo.OptionInfo> getOptionList(
            Integer questionType, String optionContent,
            ExercisesQuestionInfo.QuestionInfo questionBean) {

        List<ExercisesQuestionInfo.QuestionInfo.OptionInfo> optionList = new ArrayList<ExercisesQuestionInfo.QuestionInfo.OptionInfo>();
        if (questionType == 1 || questionType == 2 || questionType == 4) {
            String[] strArr = optionContent.split("@@");
            for (int i = 0; i < strArr.length; i++) {
                ExercisesQuestionInfo.QuestionInfo.OptionInfo optionBean = questionBean.new OptionInfo();
                optionBean.setOptionContent(strArr[i]);// 选项内容
                optionBean.setOptionLetter(QuestionUtil.getOptionArr()[i]); // 选项字母
                optionList.add(optionBean);
            }
        } else {
            // optionContent选项内容，optionImageUrl选项图片
            Map<String, Object> map = JsonUtils.json2Obj(optionContent,
                    Map.class);
            if (map != null && map.size() > 0) {
                int i = 0;
                for (Object key : map.keySet()) {
                    Map<String, Object> m = (Map<String, Object>) map.get(key);
                    ExercisesQuestionInfo.QuestionInfo.OptionInfo optionBean = questionBean.new OptionInfo();
                    optionBean
                            .setOptionContent(m.get("optionContent") == null ? ""
                                    : m.get("optionContent").toString());// 选项内容
                    optionBean
                            .setOptionImageUrl(m.get("optionImageUrl") == null ? ""
                                    : m.get("optionImageUrl").toString()); // 图片内容
                    optionBean.setOptionLetter(QuestionUtil.getOptionArr()[i]); // 选项字母
                    optionList.add(optionBean);
                    i = i+1;
                }
            }
        }
        return optionList;
    }
}
